﻿<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
	<div th:replace="~{common/common-head.html::common-head}"></div>
</head>
<body >
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;">
	<legend>欢迎使用auto-code-admin代码自动生成模板 (移动端照样能适配) <a href="http://www.zengtengpeng.com" target="_blank" style="color: #4fbd4f">演示地址</a></legend>
</fieldset>
<ul class="layui-timeline">
	<li class="layui-timeline-item">
		<i class="layui-icon layui-timeline-axis"></i>
		<div class="layui-timeline-content layui-text">
			<h3 class="layui-timeline-title">为何会发起该项目?(由于线上的数据被恶意删除,修改.所以目前每隔一个小时我会恢复一次数据)</h3>
			<p>
				1.权限,角色,用户对于绝大多数系统来说都是一成不变的.而我们每开发一个后台都需要重新一次.每次都在重复造轮子<br />
				2.对于业务绝大多数也是围绕这增删改查来进行操作.每次创建一张表.然后我们需要重新写一次增删改查,写虽然简单,不过极度耗时(view,controller,server,serverImpl,dao,xml) <br />
				所以才有了该项目,该项目能帮助你减少60%的工作量,让你专注于业务的实现. <br />
				3.如果您觉得项目还行.请点赞.您的支持是我最大的动力 <a href="https://gitee.com/ztp/auto-code-admin" target="_blank">项目地址</a> <br />
				<img src="http://images.zengtengpeng.com/auto-code-web/start.png" />
			</p>
		</div>
	</li>
	<li class="layui-timeline-item">
		<i class="layui-icon layui-timeline-axis"></i>
		<div class="layui-timeline-content layui-text">
			<h3 class="layui-timeline-title">项目架构</h3>
			<p>
				1.基于 springboot 2.0.7+mybatis+mysql<br />
				2.代码生成使用 auto-code  <a href="https://gitee.com/ztp/auto-code" target="_blank">下载源码</a> <br />
				3.模板引擎-> thymeleaf (spring boot不推荐使用jsp jsp在打包的时候会遇到各种问题)<br />
				4.前端主要使用layui(真的做的很漂亮)<br />
				5.前端后台框架layuiAdmin  https://github.com/coderyangjie/layuiAdmin<br />
			</p>
		</div>
	</li>
	<li class="layui-timeline-item">
		<i class="layui-icon layui-timeline-axis"></i>
		<div class="layui-timeline-content layui-text">
			<h3 class="layui-timeline-title">项目模块介绍</h3>
			<p>
			<pre class="layui-code" lay-title="java" lay-skin="notepad">
auto-code-admin(根节点)
  -auto-code-common ->一些公共的类,以及配置
  -auto-code-sys ->系统设置模块
  -auto-code-charts ->报表模块
  -auto-code-web ->发布模块(该模块聚合以上模块进行发布,如果报表模块不想使用直接在pom.xml将该模块注释掉就好.)
			  </pre>
			</p>
		</div>
	</li>
	<li class="layui-timeline-item">
		<i class="layui-icon layui-timeline-axis"></i>
		<div class="layui-timeline-content layui-text">
			<h3 class="layui-timeline-title">如何运行?</h3>
			<p>
				1.安装jdk1.8+, mysql5.0+,maven,git <br/>
				2. <a href="https://gitee.com/ztp/auto-code-admin" target="_blank">下载源码</a><br/>
				3. 导入 auto-code-admin 下的 auto_code.sql 初始化数据库<br/>
				4. 修改 auto-code-web/application-dev.properties 中的数据库连接以及用户名密码<br />
				5. auto-code-admin 打开cmd密令  执行 mvn clean package<br/>
				6. auto-code-admin/auto-code-web/target 找到jar包 执行 java -jar auto-code-web.jar<br/>
				7. 访问 http://localhost:8080
			</p>
		</div>
	</li>
	<li class="layui-timeline-item">
		<i class="layui-icon layui-timeline-axis"></i>
		<div class="layui-timeline-content layui-text">
			<h3 class="layui-timeline-title">如何生成代码?</h3>
			<p>
				auto-code-common 模块里有个 auto-code.jar 的本地jar.<a href="https://gitee.com/ztp/auto-code" target="_blank">源码地址</a><br/>
				执行成功后将生成 controller,server,serverImpl,dao,xml,list.html,list_detail.html.如果仅仅是单表的增删改查.你将不需要任何改动.直接就可以提交代码.<br />
				执行代码如下:
			<pre class="layui-code" lay-title="java" lay-skin="notepad">
				import com.zengtengpeng.generator.bean.StartCode;
				import com.zengtengpeng.generator.utils.AutoCodeUtils;

				import java.util.Arrays;
				import java.util.List;

				public class AutoCodeTest {
					public static void main(String[] args) {
						List<String> dataNames= Arrays.asList("test_code");
						StartCode startCode=new StartCode();
						//jdbc连接
						startCode.setJdbc("jdbc:mysql://localhost:3306/auto_code");
						//数据库用户名
						startCode.setUser("root");
						//数据库密码
						startCode.setPassword("111111");
						//需要生成的表明
						startCode.setDataNames(dataNames);
						//生成代码的绝对路径
						startCode.setParentPath("E:\\resource\\workspaceJDB\\auto-code-admin\\auto-code-web");
						//生成代码的父包
						startCode.setParentPack("com.zengtengpeng.test");
						//开始生成
						AutoCodeUtils.startByWebAdmin(startCode);
					}
				}
			  </pre>
			权限SQL也帮助你生成了.将打印在控制台上:<br />
			<span style="color: red">请注意第一句sql的parent_auth_id的值, 默认我是放在 ->代码生成(id=3) 栏目下的<br/>
			如果你需要更改请将这个值改成对应的栏目就好</span>
			<pre class="layui-code" lay-title="sql" lay-skin="notepad">
11:40:51.262 [main] INFO com.zengtengpeng.generator.create.impl.WebAdminCreateCode - 权限SQL:请注意表名注释一定要唯一,权限会找不到父ID

INSERT INTO `sys_auth` (`parent_auth_id`,`name`,`sort`,`href`,`icon`,`shows`,`create_time`) VALUES  ('3','测试生成代码','1','testCode/gotoList','layui-icon layui-icon-file-b','0',NOW());

INSERT INTO `sys_auth` (`parent_auth_id`,`name`,`sort`,`href`,`icon`,`shows`,`create_time`) VALUES  ((SELECT id FROM `sys_auth` a WHERE a.name='测试生成代码'),'查询','1','testCode/selectAll','layui-icon layui-icon-search','1',NOW());

INSERT INTO `sys_auth` (`parent_auth_id`,`name`,`sort`,`href`,`icon`,`shows`,`create_time`) VALUES  ((SELECT id FROM `sys_auth` a WHERE a.name='测试生成代码'),'导出','2','testCode/export','layui-icon layui-icon-next','1',NOW());

INSERT INTO `sys_auth` (`parent_auth_id`,`name`,`sort`,`href`,`icon`,`shows`,`create_time`) VALUES  ((SELECT id FROM `sys_auth` a WHERE a.name='测试生成代码'),'编辑','3','testCode/save','layui-icon layui-icon-edit','1',NOW());

INSERT INTO `sys_auth` (`parent_auth_id`,`name`,`sort`,`href`,`icon`,`shows`,`create_time`) VALUES  ((SELECT id FROM `sys_auth` a WHERE a.name='测试生成代码'),'删除','4','testCode/deleteByPrimaryKey','layui-icon layui-icon-fonts-del','1',NOW());
			</pre>
			</p>
		</div>

	<li class="layui-timeline-item">
		<i class="layui-icon layui-timeline-axis"></i>
		<div class="layui-timeline-content layui-text">
			<h3 class="layui-timeline-title">生成代码注意事项</h3>
			<p style="color: red">
				1.创建表结构时一定要写注释!!!,不写注释生成的代码将会没有列名等等一系列问题.写注释这个是约定!<br />
				2.获取表名的注释有些版本的mysql获取不了,所以请在主键id上写上表名注释,到时候如果获取不了表名注释我将会从Id上获取<br />
				3.目前支持生成 text,date,datetime,textarea,select五种类型的输入框<br />
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.1 text,date,datetime,textarea 映射机制我是根据数据库的数据类型进行映射的<br />
			<table lay-filter="parse-table-demo">
				<thead>
				<tr>
					<th lay-data="{field:'username'}">数据库类型</th>
					<th lay-data="{field:'joinTime'}">输入框类型</th>
				</tr>
				</thead>
				<tbody>
				<tr>
					<td>date</td>
					<td>date</td>
				</tr>
				<tr>
					<td>datetime</td>
					<td>datetime</td>
				</tr>
				<tr>
					<td>text</td>
					<td>textarea</td>
				</tr>
				<tr>
					<td>其他</td>
					<td>text</td>
				</tr>
				</tbody>
			</table>
			<div class="page-container" >
				<p style="color: red">
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.2:select类型比较特殊,由于数据库没有键值类型.
			所以我采取的是在字段注释书写json格式的注释 例: {"name":"状态","1":"启用","0":"禁用"}
			name为该字段的中文注释,然后在输入框将会生成如下的下拉框</p>
				<form class="layui-form layui-form-pane" action="">
				<div class="layui-form-item" >
					<label class="layui-form-label">状态</label>
					<div class="layui-input-inline">

						<select name="status" id="status">
							<option value="">请选择状态</option>
							<option value="1" >启用</option>
							<option value="0" >禁用</option>
						</select>
					</div>
				</div>
				</form>
			</div>
			完整的数据库实列:
			<pre class="layui-code" lay-title="sql" lay-skin="notepad">
				CREATE TABLE `test_code` (
				  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '测试生成代码',
				  `name` varchar(50) DEFAULT NULL COMMENT '名称',
				  `age` int(3) DEFAULT NULL COMMENT '年龄',
				  `status` int(2) DEFAULT NULL COMMENT '{"name":"状态","1":"启用","0":"禁用"}',
				  `birthday` date DEFAULT NULL COMMENT '生日',
				  `remarks` text COMMENT '备注',
				  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
				  PRIMARY KEY (`id`)
				) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='测试生成代码'
			</pre>
			</p>
		</div>
	</li>
	</li>
</ul>
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;">
	<legend>进阶篇</legend>
</fieldset>
<ul class="layui-timeline">
	<li class="layui-timeline-item">
		<i class="layui-icon layui-timeline-axis"></i>
		<div class="layui-timeline-content layui-text">
			<h3 class="layui-timeline-title">如何进行项目集群?</h3>
			<p>
				集群非常简单只需要简单的3部就能完成<br />
				1.安装redis <a href="https://redis.io/" target="_blank">下载地址</a>  redis官方是不支持windows的不过有社区版
				<a  href="https://github.com/MicrosoftArchive/redis/releases" target="_blank">下载地址</a><br />
				2.使用spring-session将session放入redis中,修改 auto-code-admin/pom.xml
			<pre class="layui-code" lay-title="sql" lay-skin="notepad">
					&lt;dependency&gt;
					  &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
					  &lt;artifactId&gt;spring-boot-starter-data-redis&lt;/artifactId&gt;
					&lt;/dependency&gt;
					&lt;dependency&gt;
					  &lt;groupId&gt;org.springframework.session&lt;/groupId&gt;
					  &lt;artifactId&gt;spring-session-data-redis&lt;/artifactId&gt;
					&lt;/dependency&gt;
			</pre>
				3. 修改 auto-code-web/application-dev.properties 配置文件 增加redis配置<b/>
			<pre class="layui-code" lay-title="sql" lay-skin="notepad">
					#redis
					spring.redis.host=127.0.0.1
					spring.redis.port=6379
			</pre>
			   4.到此为止,集群成功
			</p>
		</div>
	</li>
	<li class="layui-timeline-item">
		<i class="layui-icon layui-timeline-axis"></i>
		<div class="layui-timeline-content layui-text">
			<h3 class="layui-timeline-title">权限机制</h3>
			<p>
				本项目采用拦截器管理权限 具体实现 com.zengtengpeng.interceptor.UserInterceptor<br />
				1.具体怎么实现?  权限默认采用@RequestMapping映射值作为权限校验.<br />
				2.如果两个url想采用一个权限怎么办? 使用 com.zengtengpeng.common.annotation.Auth 注解, 值为 另外一个权限url.这样他们就共享同一个授权了,如果不写值默认只要登录就有该权限.<br />
				3.如果该方法不需要登录就能访问怎么办? com.zengtengpeng.common.annotation.Pass 注解标注在方法上.该方法就不需要授权<br />
			</p>
		</div>
	</li>
</ul>
</body>
<script>
    layui.use(['table','form'], function(){
        var table = layui.table;
        var form = layui.form;
        form.render();
//转换静态表格
        table.init('parse-table-demo', {
        });
    });
</script>
</html>